#include "fila.h"

void iniciar_fila(fila* nova_fila) {
  (*nova_fila).primeiro = NULL;
  (*nova_fila).ultimo = NULL;
}

void adicionar_chave(fila* nova_fila, chave nova_chave) {
  
  ponteiro_celula aux;
  
  if ((*nova_fila).ultimo == NULL) {
    (*nova_fila).ultimo = malloc(sizeof(celula));
    (*nova_fila).ultimo->chave_celula = nova_chave;
    (*nova_fila).primeiro = (*nova_fila).ultimo;
    (*nova_fila).primeiro->anterior = NULL;
  }
  else {
    aux = (*nova_fila).ultimo;
    (*nova_fila).ultimo = malloc(sizeof(celula));
    (*nova_fila).ultimo->chave_celula = nova_chave;
    (*nova_fila).ultimo->anterior = aux;
    aux->proximo = (*nova_fila).ultimo;
  }
  
  (*nova_fila).ultimo->proximo = NULL;
}


void remover_chave(fila* nova_fila) {
  
  ponteiro_celula aux;
  
  if ((*nova_fila).primeiro == (*nova_fila).ultimo) {
    free((*nova_fila).primeiro);
    (*nova_fila).primeiro = (*nova_fila).ultimo = NULL;
  }
  else {
    aux = (*nova_fila).primeiro->proximo;
    free((*nova_fila).primeiro);
    (*nova_fila).primeiro = aux;
  }
}


void finalizar_fila(fila *nova_fila) {
  
  ponteiro_celula aux;
  
  while ((*nova_fila).primeiro != NULL) {
    aux = (*nova_fila).primeiro->proximo;
    free((*nova_fila).primeiro);
    (*nova_fila).primeiro = aux;
  } 
}



void imprimir_fila(const fila nova_fila) {
  
  ponteiro_celula aux = nova_fila.primeiro;
  
  while (aux != NULL) {
    printf("ID da chave: %d\n", aux->chave_celula.id);
    aux = aux->proximo;
  }
}

